Version 1.4
This commit is contained in:
parent
0ac06f6750
commit
dedfdbcc83
@ -1,44 +1,46 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.annimon.playlisteditor"
|
||||
android:versionCode="4"
|
||||
android:versionName="1.3" >
|
||||
android:versionCode="5"
|
||||
android:versionName="1.4">
|
||||
|
||||
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="17" />
|
||||
|
||||
<uses-sdk
|
||||
android:minSdkVersion="5"
|
||||
android:targetSdkVersion="17" />
|
||||
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/AppTheme" >
|
||||
|
||||
<activity
|
||||
android:name=".SelectPlaylistActivity"
|
||||
android:allowBackup="true"
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:screenOrientation="landscape" >
|
||||
android:theme="@style/AppTheme" >
|
||||
|
||||
<activity
|
||||
android:name=".SelectPlaylistActivity"
|
||||
android:label="@string/app_name"
|
||||
android:screenOrientation="landscape" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
||||
<activity
|
||||
android:name=".EditPlaylistActivity"
|
||||
android:label="@string/app_name"
|
||||
android:screenOrientation="landscape"
|
||||
android:theme="@style/AppTheme.NoTitleBar" />
|
||||
|
||||
android:name=".EditPlaylistActivity"
|
||||
android:label="@string/app_name"
|
||||
android:screenOrientation="landscape"
|
||||
android:theme="@style/AppTheme.NoTitleBar" />
|
||||
|
||||
<activity
|
||||
android:name="com.google.ads.AdActivity"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
|
||||
|
||||
android:name=".HelpActivity"
|
||||
android:label="@string/help"
|
||||
android:screenOrientation="landscape" />
|
||||
|
||||
<activity
|
||||
android:name="com.google.ads.AdActivity"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
</manifest>
|
||||
|
Binary file not shown.
BIN
libs/GoogleAdMobAdsSdk-6.4.1.jar
Normal file
BIN
libs/GoogleAdMobAdsSdk-6.4.1.jar
Normal file
Binary file not shown.
BIN
res/drawable-hdpi/help1.png
Normal file
BIN
res/drawable-hdpi/help1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
BIN
res/drawable-hdpi/help2.png
Normal file
BIN
res/drawable-hdpi/help2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
BIN
res/drawable-hdpi/logo.png
Normal file
BIN
res/drawable-hdpi/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.9 KiB |
14
res/layout/editor_menu.xml
Normal file
14
res/layout/editor_menu.xml
Normal file
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<GridView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/gridView"
|
||||
android:layout_gravity="center"
|
||||
android:numColumns="2"
|
||||
android:background="@drawable/background"/>
|
||||
</LinearLayout>
|
101
res/layout/help.xml
Normal file
101
res/layout/help.xml
Normal file
@ -0,0 +1,101 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ViewFlipper
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/viewFlipper"
|
||||
android:paddingLeft="5dp"
|
||||
android:paddingRight="5dp">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:text="@string/help_title_1"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:text="@string/help_message_1"
|
||||
android:gravity="center"
|
||||
/>
|
||||
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:src="@drawable/help1"
|
||||
android:contentDescription="@string/help_message_1"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:text="@string/help_title_2"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:text="@string/help_message_2"
|
||||
android:gravity="center"
|
||||
/>
|
||||
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:src="@drawable/help2"
|
||||
android:contentDescription="@string/help_message_2"/>
|
||||
</LinearLayout>
|
||||
|
||||
<!-- About -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:text="@string/about"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginTop="5dp"
|
||||
android:text="@string/about_message"
|
||||
android:gravity="center"
|
||||
/>
|
||||
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:src="@drawable/logo"
|
||||
android:contentDescription="@string/about" />
|
||||
</LinearLayout>
|
||||
|
||||
</ViewFlipper>
|
@ -19,16 +19,15 @@
|
||||
|
||||
<Button
|
||||
style="?android:attr/buttonStyleSmall"
|
||||
android:id="@+id/saveButton"
|
||||
android:id="@+id/showMenu"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_marginRight="5dp"
|
||||
android:background="@null"
|
||||
android:drawableLeft="@android:drawable/ic_menu_save"
|
||||
android:text="@string/save_playlist" />
|
||||
|
||||
android:drawableLeft="@android:drawable/ic_menu_more"
|
||||
android:text="@string/menu" />
|
||||
</RelativeLayout>
|
||||
|
||||
<LinearLayout
|
||||
|
@ -5,6 +5,11 @@
|
||||
android:showAsAction="always|withText"
|
||||
android:title="@string/new_playlist"
|
||||
android:icon="@drawable/ic_new" />
|
||||
|
||||
<item android:id="@+id/menu_help"
|
||||
android:showAsAction="always|withText"
|
||||
android:title="@string/help"
|
||||
android:icon="@android:drawable/ic_menu_help" />
|
||||
|
||||
<item android:id="@+id/menu_restore_playlist"
|
||||
android:showAsAction="never"
|
||||
|
@ -11,10 +11,28 @@
|
||||
<string name="enter_name">Введите имя</string>
|
||||
<string name="done">Готово!</string>
|
||||
<string name="all_tracks">Все треки</string>
|
||||
|
||||
<string name="menu">Меню</string>
|
||||
<string name="sort_by_id">Сортировать по id</string>
|
||||
<string name="sort_by_artist">Сортировать по исполнителю</string>
|
||||
<string name="sort_by_name">Сортировать по названию</string>
|
||||
<string name="reverse_list">В обратном порядке</string>
|
||||
<string name="show_differences">Показать различия</string>
|
||||
|
||||
<!-- Errors, messages etc -->
|
||||
<string name="error_while_restore_backup">Ошибка при восстановлении резервной копии</string>
|
||||
<string name="unable_to_store_backup">Невозможно сохранить резервную копию</string>
|
||||
<string name="empty_backup_list">Пустой список резервных копий</string>
|
||||
|
||||
<string name="press_again">Нажмите еще раз для выхода в меню</string>
|
||||
|
||||
<!-- Help, tutorial -->
|
||||
<string name="help">Помощь</string>
|
||||
<string name="help_title_1">Добавление/Удаление трека</string>
|
||||
<string name="help_message_1">Нажмите на трек в левом списке (1), затем на пункт в правом, перед которым следует поместить трек (2). Для удаления нажмите и удерживайте пункт в правом списке.</string>
|
||||
<string name="help_title_2">Показать различия</string>
|
||||
<string name="help_message_2">Используется для поиска треков в левом списке, которых нет в правом, а также для поиска дубликатов.</string>
|
||||
|
||||
<!-- About -->
|
||||
<string name="about">О программе</string>
|
||||
<string name="about_message"><b>Playlist Editor 1.4</b>\n<b>Автор</b>: Виктор aNNiMON Мельник\nhttp://annimon.com/</string>
|
||||
|
||||
</resources>
|
@ -11,10 +11,29 @@
|
||||
<string name="enter_name">Enter name</string>
|
||||
<string name="done">Done!</string>
|
||||
<string name="all_tracks">All tracks</string>
|
||||
|
||||
<string name="menu">Menu</string>
|
||||
<string name="sort_by_id">Sort by id</string>
|
||||
<string name="sort_by_artist">Sort by artist</string>
|
||||
<string name="sort_by_name">Sort by name</string>
|
||||
<string name="reverse_list">Reverse list</string>
|
||||
<string name="show_differences">Show differences</string>
|
||||
|
||||
|
||||
<!-- Errors, messages etc -->
|
||||
<string name="error_while_restore_backup">Error while restore backup</string>
|
||||
<string name="unable_to_store_backup">Unable to store backup</string>
|
||||
<string name="empty_backup_list">Empty backup list</string>
|
||||
<string name="press_again">Press again for exit to menu</string>
|
||||
|
||||
<!-- Help, tutorial -->
|
||||
<string name="help">Help</string>
|
||||
<string name="help_title_1">Add/Remove track</string>
|
||||
<string name="help_message_1">Press item in the left list (1), then press item in right list, which should be placed in front of him (2). Long tap to remove track (in right list only).</string>
|
||||
<string name="help_title_2">Show differences</string>
|
||||
<string name="help_message_2">Used to find tracks in the left list, which is not present in right list and to find duplicates.</string>
|
||||
|
||||
<!-- About -->
|
||||
<string name="about">About</string>
|
||||
<string name="about_message"><b>Playlist Editor 1.4</b>\n<b>Author</b>: Victor aNNiMON Melnik\nhttp://annimon.com/</string>
|
||||
|
||||
</resources>
|
34
src/com/annimon/playlisteditor/HelpActivity.java
Normal file
34
src/com/annimon/playlisteditor/HelpActivity.java
Normal file
@ -0,0 +1,34 @@
|
||||
package com.annimon.playlisteditor;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.ViewFlipper;
|
||||
|
||||
/**
|
||||
* Show help window.
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class HelpActivity extends Activity {
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.help);
|
||||
|
||||
final ViewFlipper flipper = (ViewFlipper) findViewById(R.id.viewFlipper);
|
||||
flipper.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
flipper.showNext();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
super.onBackPressed();
|
||||
overridePendingTransition(R.anim.slide_right_in, R.anim.slide_right_out);
|
||||
}
|
||||
|
||||
}
|
52
src/com/annimon/playlisteditor/MenuDialog.java
Normal file
52
src/com/annimon/playlisteditor/MenuDialog.java
Normal file
@ -0,0 +1,52 @@
|
||||
package com.annimon.playlisteditor;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.GridView;
|
||||
|
||||
/**
|
||||
* Custom menu dialog.
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public abstract class MenuDialog implements AdapterView.OnItemClickListener {
|
||||
|
||||
private Dialog dialog;
|
||||
private int[] menuIds;
|
||||
|
||||
public MenuDialog(Context context, int[] menuIds) {
|
||||
this.menuIds = menuIds;
|
||||
|
||||
dialog = new Dialog(context);
|
||||
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
dialog.setCancelable(true);
|
||||
dialog.setContentView(R.layout.editor_menu);
|
||||
|
||||
String[] items = new String[menuIds.length];
|
||||
for (int i = 0; i < items.length; i++) {
|
||||
items[i] = context.getString(menuIds[i]);
|
||||
}
|
||||
|
||||
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
|
||||
context, android.R.layout.simple_list_item_1, items);
|
||||
|
||||
GridView gridView = (GridView) dialog.findViewById(R.id.gridView);
|
||||
gridView.setAdapter(adapter);
|
||||
gridView.setOnItemClickListener(this);
|
||||
}
|
||||
|
||||
public void show() {
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
|
||||
onClick(menuIds[position], (position % 2) == 0);
|
||||
dialog.dismiss();
|
||||
}
|
||||
|
||||
protected abstract void onClick(int resId, boolean leftColumn);
|
||||
}
|
@ -43,14 +43,13 @@ public class PlaylistBackup {
|
||||
}
|
||||
|
||||
public List<BackupFile> list() throws IOException {
|
||||
String[] filelist = context.fileList();
|
||||
int length = filelist.length;
|
||||
List<BackupFile> backups = new ArrayList<BackupFile>(length);
|
||||
|
||||
for (int i = 0; i < length; i++) {
|
||||
if (filelist[i].endsWith(BACKUP_EXT)) {
|
||||
String playlistName = getPlaylistName(filelist[i]);
|
||||
backups.add( new BackupFile(filelist[i], playlistName) );
|
||||
String[] fileslist = context.fileList();
|
||||
List<BackupFile> backups = new ArrayList<BackupFile>(fileslist.length);
|
||||
|
||||
for (String filename : fileslist) {
|
||||
if (filename.endsWith(BACKUP_EXT)) {
|
||||
String playlistName = getPlaylistName(filename);
|
||||
backups.add(new BackupFile(filename, playlistName));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -126,7 +126,7 @@ public class PlaylistDatabase {
|
||||
|
||||
/**
|
||||
* Get tracks of playlist. If playlistId equals -1 - return all tracks in system.
|
||||
* @param context
|
||||
* @param context context.
|
||||
* @param playlistId id of playlist, or -1.
|
||||
* @return tracks array.
|
||||
*/
|
||||
|
@ -77,6 +77,11 @@ public class SelectPlaylistActivity extends ListActivity {
|
||||
case R.id.menu_restore_playlist:
|
||||
restorePlaylist();
|
||||
break;
|
||||
case R.id.menu_help:
|
||||
Intent intent = new Intent(this, HelpActivity.class);
|
||||
startActivity(intent);
|
||||
overridePendingTransition(R.anim.slide_left_in, R.anim.slide_left_out);
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -2,6 +2,8 @@ package com.annimon.playlisteditor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
@ -17,6 +19,8 @@ import com.annimon.playlisteditor.data.Track;
|
||||
*/
|
||||
public class TracksAdapter extends ArrayAdapter<Track> {
|
||||
|
||||
public static enum Sort { BY_ID, BY_ARTIST, BY_NAME }
|
||||
|
||||
private int resource;
|
||||
private LayoutInflater inflater;
|
||||
private List<Track> objects;
|
||||
@ -44,6 +48,43 @@ public class TracksAdapter extends ArrayAdapter<Track> {
|
||||
objects.remove(position);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public void sortTracks(Sort type) {
|
||||
Comparator<Track> comparator = null;
|
||||
switch (type) {
|
||||
case BY_ID:
|
||||
comparator = new Comparator<Track>() {
|
||||
@Override
|
||||
public int compare(Track track, Track track2) {
|
||||
return track.getAudioId() - track2.getAudioId();
|
||||
}
|
||||
};
|
||||
break;
|
||||
case BY_ARTIST:
|
||||
comparator = new Comparator<Track>() {
|
||||
@Override
|
||||
public int compare(Track track, Track track2) {
|
||||
return track.getArtist().compareToIgnoreCase(track2.getArtist());
|
||||
}
|
||||
};
|
||||
break;
|
||||
case BY_NAME:
|
||||
comparator = new Comparator<Track>() {
|
||||
@Override
|
||||
public int compare(Track track, Track track2) {
|
||||
return track.getTitle().compareToIgnoreCase(track2.getTitle());
|
||||
}
|
||||
};
|
||||
break;
|
||||
}
|
||||
Collections.sort(objects, comparator);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public void reverseTracks() {
|
||||
Collections.reverse(objects);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
|
@ -11,11 +11,19 @@ public class Track {
|
||||
this.artist = artist;
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
|
||||
public int getAudioId() {
|
||||
return audioId;
|
||||
}
|
||||
|
||||
public String getArtist() {
|
||||
return artist;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return artist + " - " + title;
|
||||
|
Loading…
Reference in New Issue
Block a user